//===============================================================================
// Microsoft Architecture Strategy Team
// LitwareHR - SaaS Sample Application
//===============================================================================
// Copyright  Microsoft Corporation.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===============================================================================
// The example companies, organizations, products, domain names,
// e-mail addresses, logos, people, places, and events depicted
// herein are fictitious.  No association with any real company,
// organization, product, domain name, email address, logo, person,
// places, or events is intended or should be inferred.
//===============================================================================


//===============================================================================
// Microsoft Architecture Strategy Team
// LitwareHR - SaaS Sample Application
//===============================================================================
// Copyright  Microsoft Corporation.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===============================================================================
// The example companies, organizations, products, domain names,
// e-mail addresses, logos, people, places, and events depicted
// herein are fictitious.  No association with any real company,
// organization, product, domain name, email address, logo, person,
// places, or events is intended or should be inferred.
//===============================================================================



using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Text;
using System.Web;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;

namespace PrivateApp
{
    /// <summary>
    /// Implements a <see cref="IHttpModule"/> for logging exceptions using Enterprise Library.
    /// </summary>
    public class ExceptionLogger : IHttpModule
    {
        /// <summary>
        /// Disposes the object.
        /// </summary>
        public void Dispose()
        {
        }

        /// <summary>
        /// Intializes the module.
        /// </summary>
        /// <param name="context">The application hosting the module.</param>
        public void Init(HttpApplication context)
        {
            context.Error += new EventHandler(OnUnhandledException);            
        }

        /// <summary>
        /// Handles the <see cref="HttpApplication.Error"/> event, logging the expection usign the <see cref="ExceptionPolicy"/>.
        /// </summary>
        /// <param name="sender">The object firing the event.</param>
        /// <param name="e">The event data.</param>
        protected virtual void OnUnhandledException(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            Exception ex = application.Server.GetLastError().GetBaseException();
            ExceptionPolicy.HandleException(ex, "GlobalExceptionLogger");
        }
    }
}
